﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Ventas
{
    public class GetPendienteFactConceptoList
    {
        int _count;


        public int Count(int idMoneda,
                         int idOrdenVentaItem,
                         int startRowIndex,
                         int maximumRows,
                         string sortExpression)
        {
            return _count;
        }

        public IQueryable<PendienteFacturaInfo> ApplySelect_ListInfo(int idOrdenVentaItem)
        {

            var q = from a in new DocumentoVentaBL().GetConceptosPendientesFacturacion(idOrdenVentaItem)
                    select new PendienteFacturaInfo
                    {
                        cliente=a.OrdenVentaItem.OrdenVenta.Cliente.descripcion,
                        idInternal = a.idInternal,
                        idOrdenVentaItem=a.idOrdenVentaItem,
                        idProyecto=a.OrdenVentaItem.OrdenVenta.idProyecto,
                        idMoneda=a.idMoneda,
                        concepto=a.ConceptoItem.descripcion,
                        localizacion = string.Format("{0} {1}", a.OrdenVentaItem.UI.UILocalizacion.descripcion, a.OrdenVentaItem.UI.UIBloque.descripcion),
                        totalStr=string.Format("{0:N}",a.total-a.totalFin),
                        total=a.total-a.totalFin, //considerando que  promero se realiza la factura luego el pago
                        UIStr = a.OrdenVentaItem.UI.descripcion,
                        etapa = a.OrdenVentaItem.UI.Etapa.descripcion,
                        fecha = a.OrdenVentaItem.OrdenVenta.fecha
                    };
            return q;
        }



        private IQueryable<PendienteFacturaInfo> ApplySort(IQueryable<PendienteFacturaInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "UIStr":
                    q = q.OrderBy(b => b.UIStr);
                    break;
                case "UIStr DESC":
                    q = q.OrderByDescending(b => b.UIStr);
                    break;

                case "total":
                    q = q.OrderBy(b => b.total);
                    break;
                case "total DESC":
                    q = q.OrderByDescending(b => b.total);
                    break;



                case "localizacion":
                    q = q.OrderBy(b => b.localizacion);
                    break;
                case "localizacion DESC":
                    q = q.OrderByDescending(b => b.localizacion);
                    break;

                case "concepto":
                    q = q.OrderBy(b => b.concepto);
                    break;
                case "concepto DESC":
                    q = q.OrderByDescending(b => b.concepto);
                    break;



                case "etapa":
                    q = q.OrderBy(b => b.etapa);
                    break;
                case "etapa DESC":
                    q = q.OrderByDescending(b => b.etapa);
                    break;


                case "cliente":
                    q = q.OrderBy(b => b.cliente);
                    break;
                case "cliente DESC":
                    q = q.OrderByDescending(b => b.cliente);
                    break;

                
                default:
                    q = q.OrderByDescending(b => b.fecha);
                    break;
            }
            return q;
        }


        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<PendienteFacturaInfo> Execute(int idMoneda,
                                                            int idOrdenVentaItem,
                                                             int startRowIndex,
                                                             int maximumRows,
                                                             string sortExpression)
        {


            var q = ApplySelect_ListInfo(idOrdenVentaItem);


           // q = q.Where(a => a.idMoneda==idMoneda);

            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }



                        

    }
}
